package com.carpark.ejb.DAO;

import com.carpark.ejb.Model.AccountingdataModel;
import com.carpark.ejb.Model.CarsModel;
import com.carpark.ejb.Model.ClientsModel;
import com.carpark.ejb.Model.EmployeesModel;
import com.carpark.ejb.Model.ParkingpassesModel;
import com.carpark.ejb.Model.ParkingspacesModel;
import com.carpark.ejb.Model.ParksModel;
import com.carpark.ejb.Model.PassesrecordsModel;
import com.carpark.ejb.Model.PaymentsModel;
import com.carpark.ejb.Model.ReceivablesModel;
import com.carpark.ejb.Model.ServicesModel;
import com.carpark.ejb.Model.TarrifsModel;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Sawior
 */
import javax.ejb.Remote;

@Remote
public interface DAO {

    public EmployeesModel addEmployee(EmployeesModel employee);

    public EmployeesModel updateEmployee(EmployeesModel employee);

    public EmployeesModel deleteEmployee(EmployeesModel employee);

    public EmployeesModel getEmployeeById(Integer id);

    public List<EmployeesModel> getAllEmployees();

    public int getEmployeesModelSize();

    public ClientsModel addClient(ClientsModel client);

    public ClientsModel updateClient(ClientsModel client);

    public ClientsModel deleteClient(ClientsModel client);

    public ClientsModel getClientById(Integer id);

    public ClientsModel getClientByEmail(String mail);

    public List<ClientsModel> getAllClients();

    public int getClientsModelSize();

    public CarsModel addCar(CarsModel car);

    public CarsModel updateCar(CarsModel car);

    public CarsModel deleteCar(CarsModel car);

    public CarsModel getCarById(Integer id);

    public int getCarsSize();

    public ParkingspacesModel addParkingSpace(ParkingspacesModel parkingSpace);

    public ParkingspacesModel updateParkingSpace(ParkingspacesModel parkingSpace);

    public ParkingspacesModel deleteParkingSpace(ParkingspacesModel parkingSpace);

    public List<ParkingspacesModel> getAllParkingSpaces();

    public int getParkingSpacesSize();

    public ParkingspacesModel getParkingSpacesByNumber(Integer number);

    public List<ParkingspacesModel> getParkingSpacesByType(String type);

    public List<ParkingspacesModel> getParkingSpacesByStatus(String status);

    public boolean synchronizeParkingSpacesWithConfiguration(List<ParkingspacesModel> spacesToUpdate);

    public TarrifsModel addTarrif(TarrifsModel tarrif);

    public List<ParkingpassesModel> getParkingPassBySpaceId(ParkingspacesModel space);

    public TarrifsModel updateTarrif(TarrifsModel tarrif);

    public TarrifsModel deleteTarrifs(TarrifsModel tarrif);

    public int getTarrifsSize();

    public List<TarrifsModel> getAllTarrifs();

    public TarrifsModel getTarrifsById(Integer id);

    public List<TarrifsModel> getTarrifsByName(String name);

    public List<TarrifsModel> getTarrifsByIssueDate(Date issueDate);

    public List<TarrifsModel> getTarrifsByEndDate(Date endDate);

    public List<TarrifsModel> getTarrifsByDurationTime(String durationTime);

    public List<TarrifsModel> getTarrifsByRank(Double rank);

    public List<TarrifsModel> getTarrifsByCarType(String carType);

    public AccountingdataModel addAccountingdata(AccountingdataModel accountingData);

    public AccountingdataModel updateAccountingdata(AccountingdataModel accountingData);

    public AccountingdataModel deleteAccountingdata(AccountingdataModel accountingdataModel);

    public AccountingdataModel getAccountingDataById(Integer id);

    public AccountingdataModel updateAccData(AccountingdataModel accountingdataModel);

    public Collection<AccountingdataModel> getAccountingDataByName(String name);

    public Collection<AccountingdataModel> getAccountingDataByCity(String city);

    public Collection<AccountingdataModel> getAccountingDataByZipCode(String zipCode);

    public Collection<AccountingdataModel> getAccountingDataByPayerType(String payerType);

    public int getAccountingDataSize();

    public List<AccountingdataModel> getAllAccountingData();

    public ServicesModel addService(ServicesModel servicesModel);

    public ServicesModel updateService(ServicesModel servicesModel);

    public ServicesModel addService(ServicesModel servicesModel, ClientsModel client, EmployeesModel epEmployees);

    public ServicesModel deleteService(ServicesModel servicesModel);

    public List<ServicesModel> getServicesAll();

    public List<ServicesModel> getServicesByModificationDate(Date modificationDate);

    public int getServicesSize();

    public List<ServicesModel> getServicesByClientId(Integer id);

    public ServicesModel getServicesByID(Integer Id);

    public ReceivablesModel addReceivable(ReceivablesModel receivable);

    public ReceivablesModel updateReceivable(ReceivablesModel receivable);

    public ReceivablesModel addReceivable(ReceivablesModel receivable, ParkingpassesModel parkingPass);

    public ReceivablesModel updateReceivable(ReceivablesModel receivable, ParkingpassesModel parkingPass);

    public List<ReceivablesModel> getAllReceivable();

    public int getReceivableSize();

    public ReceivablesModel getReceivablesById(Integer id);

    public List<ReceivablesModel> getReceivablesByAmount(Double amount);

    public List<ReceivablesModel> getReceivablesByCreationDate(Date creationDate);

    public List<ReceivablesModel> getReceivablesByPayDeadline(Date payDeadline);

    public ReceivablesModel deleteReceivable(ReceivablesModel receivable);

    public PaymentsModel addPayment(PaymentsModel payment);

    public PaymentsModel addPayment(PaymentsModel payment, ReceivablesModel receivable);

    public List<PaymentsModel> getPaymentsByPaymentForm(String paymentForm);

    public List<PaymentsModel> getAllPayments();

    public int getPaymentsSize();

    public PaymentsModel getPaymentsById(Integer id);

    public List<PaymentsModel> getPaymentsByPaymentDate(Date paymentDate);

    public PaymentsModel updatePayment(PaymentsModel payment);

    public PaymentsModel updatePayment(PaymentsModel payment, ReceivablesModel receivable);

    public PaymentsModel deletePayment(PaymentsModel payment);

    public List<ParksModel> getAllParks();

    public List<CarsModel> getAllCars();

    public int getParksSize();

    List<ReceivablesModel> getPayedReceivables();

    public ParksModel getParksById(Integer id);

    public List<ParksModel> getParksByParkDate(Date parkDate);

    public List<ParksModel> getParksByType(String type);

    public ParksModel addPark(ParksModel park);

    public ParksModel addPark(ParksModel park, ParkingpassesModel parkingPass);

    public ParksModel updatePark(ParksModel park);

    public ParksModel updatePark(ParksModel park, ParkingpassesModel parkingPass);

    public ParksModel deletePark(ParksModel park);

    public List<ParkingpassesModel> getAllParkingPasses();

    public int getParkingPassesSize();

    public ParkingpassesModel getParkingPassById(Integer id);

    public List<ParkingpassesModel> getParkingPassesByDateIssue(Date dateIssue);

    public List<ParkingpassesModel> getParkingPassesByExpirationDate(Date expirationDate);

    public List<ParkingpassesModel> getParkingPassesByPassType(String passType);

    public ParkingpassesModel addPass(ParkingpassesModel pass);

    public ParkingpassesModel addPass(ParkingpassesModel pass, CarsModel car);

    public ParkingpassesModel addPass(ParkingpassesModel pass, TarrifsModel tarrif);

    public ParkingpassesModel addPass(ParkingpassesModel pass, ParkingspacesModel parkingSpace);

    public ParkingpassesModel addPass(ParkingpassesModel pass, CarsModel car, TarrifsModel tarrif);

    public ParkingpassesModel addPass(ParkingpassesModel pass, CarsModel car, ParkingspacesModel parkingSpace);

    public ParkingpassesModel addPass(ParkingpassesModel pass, CarsModel car, ParkingspacesModel parkingSpace, TarrifsModel tarrif);

    public ParkingpassesModel updatePass(ParkingpassesModel pass);

    public ParkingpassesModel updatePass(ParkingpassesModel pass, CarsModel car);

    public ParkingpassesModel updatePass(ParkingpassesModel pass, TarrifsModel tarrif);

    public ParkingpassesModel updatePass(ParkingpassesModel pass, ParkingspacesModel parkingSpace);

    public ParkingpassesModel updatePass(ParkingpassesModel pass, CarsModel car, TarrifsModel tarrif);

    public ParkingpassesModel updatePass(ParkingpassesModel pass, CarsModel car, ParkingspacesModel parkingSpace);

    public ParkingpassesModel updatePass(ParkingpassesModel pass, CarsModel car, ParkingspacesModel parkingSpace, TarrifsModel tarrif);

    public ParkingpassesModel deletePass(ParkingpassesModel pass);

    public PassesrecordsModel addPassRecord(PassesrecordsModel passRecord);

    public PassesrecordsModel addPassRecord(PassesrecordsModel passRecord, ClientsModel client);

    public PassesrecordsModel addPassRecord(PassesrecordsModel passRecord, ParkingpassesModel parkingPass);

    public PassesrecordsModel addPassRecord(PassesrecordsModel passRecord, AccountingdataModel accountingData);

    public PassesrecordsModel addPassRecord(PassesrecordsModel passRecord, ClientsModel client, ParkingpassesModel parkingPass, AccountingdataModel accountingData);

    public PassesrecordsModel updatePassRecord(PassesrecordsModel passRecord);

    public PassesrecordsModel updatePassRecord(PassesrecordsModel passRecord, ClientsModel client);

    public PassesrecordsModel updatePassRecord(PassesrecordsModel passRecord, ParkingpassesModel parkingPass);

    public PassesrecordsModel updatePassRecord(PassesrecordsModel passRecord, AccountingdataModel accountingData);

    public PassesrecordsModel updatePassRecord(PassesrecordsModel passRecord, ClientsModel client, ParkingpassesModel parkingPass, AccountingdataModel accountingData);

    public PassesrecordsModel deletePassRecord(PassesrecordsModel passRecord);

    public int getPassesrecordModelSize();

    public List<PassesrecordsModel> getPassesrecordByAddingDate(Date addingDate);

    public List<PassesrecordsModel> getAllPassesRecords();

    public PassesrecordsModel getPassesrecordById(Integer id);

    public List<ReceivablesModel> getReceivablesByClient(ClientsModel cl);

    public List<ServicesModel> getServicesByClient(ClientsModel cl);

    public List<ParksModel> getParksByClient(ClientsModel cl);

    public List<PaymentsModel> getPaymentsByClient(ClientsModel cl);

    public List<ParkingpassesModel> getPassesByClient(ClientsModel cl);

    public List<CarsModel> getCarsByClient(ClientsModel cl);

    public List<AccountingdataModel> getAccountingDataByClient(ClientsModel cl);

    public List<ParkingspacesModel> getParkingSpacesForReservation(Date issue, Date end, String carType);

    public List<CarsModel> getCarsByClientAndType(ClientsModel cl, String type);

    public AccountingdataModel getAccountingByPass(ParkingpassesModel pass);

    public List<ParkingpassesModel> getPassesByAccounting(AccountingdataModel acc);

    public List<ParksModel> getParksByClientAndType(ClientsModel cl, String type);

    public List<TarrifsModel> getTarrifsByCarTypeAndDT(String carType, String time);
}
